package JavaEE.NetWork1;

// 局域网: 由"交换机"将"计算机、服务器、打印机、网络存储设备等终端设备"链接在一起的网络.
// 广域网: 由"路由器"将"不同地理位置的局域网"链接在一起的"大规模"网络.

/** ip地址 **/
// ip地址: 区分网络上某个具体的设备,原则上希望每个设备都有唯一的ip地址.
// ip地址的本质: 一个32位的(二进制数,int) -> 11000000 10101000 00000001 00000001 (二进制转十进制)
// 而为了提高可读性,把32位ip地址分成4个部分,每个部分之间通过'.'来分割. -> 192.168.1.1

/** 端口号 **/
// 端口号:用于标识同一台设备上不同应用程序或服务的通信通道.
// 端口号的本质: 一个16位的(二进制数) 附加在ip地址后,格式为(ip:端口) -> 192.168.1.1:80
// 端口号的作用: 1. 多路复用(单个设备可同时运行多个网络程序)

// (端口号和ip地址的关系): ip地址相当于 "定位到具体设备(如你家地址)",端口号相当于 "定位到设备上的具体程序(家里某个房间)"

// 认识协议:通信双方对于数据传输格式的"约定"
// 网络的本质是传输 "光/电信号" 实际上是通过"光纤"传输"某种频率"的激光,用于表示数据"0/1",约定协议,就是约定01数据格式.

/** 五元组: **/
// 源ip,源端口,目的ip,目的端口,协议类型
// 如:你买了一个快递,那么就会有(寄件人地址,寄件人电话,收件人地址,收件人电话,"圆通/中通/顺丰")

// 协议分层: 通常一个目标,只用一个协议显得太复杂,而分成多个协议又很乱,于是应该"多个,分层"

/** TCP/IP 五层模型 **/
// 1.物理层:网络通信中依赖的硬件设施(网线,光纤...)
// 2.数据链路层:负责两个相邻节点之间的通信
// 3.网络层:负责任意两个节点之间的路径规划
// 4.传输层:不关心中间的传输过程,只关心传输的起点和终点
// 5.应用层:应用程序,数据如何使用,程序员说了算

/** 封装和分用 **/
// 如:qq发送一个hello给别人:(以UDP为例)
// -----发送方-----
// 1.应用层
// 用户输入"hello",点击发送,qq应用程序获取到"hello",构造成"应用层数据包"(按照一定应用层协议构造字符串)
// 2.传输层(系统内核)
// 按照传输层的协议,构造出"传输层"数据包
// 传输层涉及到的协议,主要是"TCP"和"UDP",UDP数据包包含"报头+载荷(传输层数据包)"
// 最好传输层把构造好的传输层数据包,调用api交给网络层
// 3.网络层
// 最主要的是"ip协议",ip协议会在"传输层数据包"的基础上,填上ip报头.
// (ip报头中包含"源ip","目的ip")
// (UDP报头中包含"源端口","目的端口")
// 4.数据链路层
// 数据链路层最主要的协议:"以太网"(插网线/光纤通信的网络)(wifi,5G信号等不同,有各自的协议)
// 以太网协议,在ip数据包的基础上拼接信息(以太网帧头,帧尾)
// 以太网帧头:(源mac地址,目的mac地址) -> (只负责相邻节点)
// ip报头:(源ip,目的ip) -> (总领整个通信,整个通信的起点)
// "将上述数据进一步交给物理层"
// 5.物理层
// 将上述的0101数据,转换成光信号/电信号/电磁波,通过物理介质,传输出去.
/** (应用层 -> 物理层) 的过程被称为"封装" **/
// -----接收方-----
// 1.物理层
// 把光电信号转换成0101数字信号,交给数据链路层
// 2.数据链路层
// 以太网协议就会进行解析,(以太网帧头,以太网帧尾)
// 去掉帧头帧尾,取出载荷,交给网络层
// 3.网络层
// ip协议,也会进行解析
// 也会取出载荷,进一步交给传输层
// 4.传输层
// UDP协议,再进行解析
// 也会取出载荷,进一步交给应用层
// 5.应用层
// 应用层协议进行解析
// 这一步就能够将信息提取出来,显示到界面上~
/** (物理层 -> 应用层) 的过程被称为"分用" **/

// 传输层涉及到的协议 TCP 和 UDP 协议,这两个协议提供了两组socket api(网络通信api)
// TCP:有连接,可靠传输,面向字节流,全双工
// UDP:无连接,不可靠传输,面向数据报,全双工
// UDP就像写信,而TCP就像打电话!
// UDP:必须写完扔进邮筒,不管对方收没收到,也不管信的顺序
// TCP:必须对方接通才能通话,保证每句话按顺序收到.
// 1.有无连接:
// TCP的通信双方回保存对方信息(有连接),UDP则不保存(无连接)
// 2.可靠/不可靠传输:
// TCP回尽可能保证数据报能够被对端收到(可靠),而UDP把数据包发出去后就不管了(不可靠)
// 3.面向字节流/数据报:
// 面向字节流:TCP读写数据的基本单位,就是字节
// 面向数据报:UDP读写数据的基本单位,是一个"数据报"(若干字节构成的结构化数据)
// 4.全/半双工
// 全双工:TCP/UDP一个信道,双向通信
// 单双工:一个信道,单向通信

public class Demo1 {
    public static void main(String[] args) {

    }
}























